package com.wmwj.hxlj.service;

import com.wmwj.hxlj.entity.Article;
import com.wmwj.hxlj.entity.vo.ArticleVo;
import com.wmwj.hxlj.entity.vo.PageResult;
import com.wmwj.hxlj.utils.Result;

import java.util.List;

public interface ArticleService {
    /**
     * 发布文章
     * @param article 文章对象
     * @return 发布的文章对象
     */
    Result publishArticle(Article article);

    /**
     * 更新文章
     * @param article 文章对象
     * @return 更新后的文章对象
     */
    Result updateArticle(Article article);

    /**
     * 根据ID获取文章详情
     * @param id 文章ID
     * @return 文章对象
     */
    Result getArticleById(Long id);

    /**
     * 删除文章
     * @param id 文章ID
     * @return 删除结果
     */
    Result<String> deleteArticle(Long id);

    /**
     * 获取用户的草稿文章
     * @return 草稿文章列表
     */
    Result<List<Article>> getDraftArticles();

    /**
     * 获取所有文章
     * @return 文章列表
     */
    Result<List<ArticleVo>> getAllArticles(Integer pageStart);

    /**
     * 获取用户的草稿文章
     * @param id
     * @return
     */
    Result<List<ArticleVo>> getUserDraftArticles(Long id);

    /**
     * 根据关键词搜索文章
     * @param keyword
     * @param pageStart
     * @return
     */
    Result<List<ArticleVo>> searchArticles(String keyword,Integer pageStart);

    /**
     * 根据用户ID获取用户的文章
     * @param id
     * @param pageStart
     * @return
     */
    Result<List<ArticleVo>> getUserArticles(Long id, Integer pageStart);

    /**
     * 点赞文章
     * @param articleId
     * @param userId
     * @return
     */
    Result<Integer> likeArticle(Long articleId , Long userId);


    Result<List<ArticleVo>> searchArticlesByTag(String tagName);

    Result<List<ArticleVo>> searchArticlesByCategoryId(Long categoryId, Integer pageStart);

    /**
     * 管理员获取所有文章
     * @param pageStart
     * @return
     */
    Result<PageResult<Article>> adminGetAllArticles(Integer pageStart);

    /**
     * 管理员搜索文章
     * @param keyword
     * @param pageStart
     * @return
     */
    Result<PageResult<Article>> adminSearchArticles(String keyword, Integer pageStart);

    /**
     * 更新文章状态
     * @param id
     * @return
     */
    Result<String> updateStatus(Long id);
}